package models
/*********************************************************/
/********************本文档为数据库结构文档******************/
/************************Admin的数据结构********************/
/*********************version:1.0*************************/
/****Copyright (c) 2014年 许剑华. All rights reserved******/
/*********************************************************/
import (
	//"errors"
	_"log"
	"time"
	"github.com/astaxie/beego/orm"
	_"github.com/astaxie/beego/validation"
	."smart_home/lib"
	"fmt"
)
type Admin struct {
	Id          	int64		`orm:"unique;auto"`
	Tel				string		`orm:"unique;size(200)" "PK" form:"Tel"  valid:"Required;MaxSize(200);MinSize(11)"`
	UserName    	string		`orm:"size(100)" form:"Username"  valid:"Required;MaxSize(100);MinSize(6)"`
	UserPw			string		`orm:"size(100)" form:"Password" valid:"Required;MaxSize(20);MinSize(6)"`
	FamilyMemID    	string
	//Group     		*Group   `orm:"rel(one)"` // OneToOne relation
	Createtime    	time.Time `orm:"type(datetime);auto_now_add" `
	Permission      int				//权限位，0x01&Permission == 1,代表管理员权限
}

func init() {
	// 需要在init中注册定义的model
	orm.RegisterModel(new(Admin))
}

//获取本服务器的连接池中的设备
//@return   admins []Admin   返回admin的数组
//@return   count int64      数组的数量

func GetAdminList ()(admins []Admin,count int64) {
	o := orm.NewOrm()
	admin := new(Admin)
	qs := o.QueryTable(admin)
	qs.All(&admins)
	count, _ = qs.Count()
	return admins, count
}

//添加用户
//@param u  *Admin      要添加的用户数组结构体
//@return    int64      返回用户的id
//@return    error      返回的错误
func AddAdmin(u *Admin) (int64, error) {
	o := orm.NewOrm()

	u.UserPw = Strtomd5(u.UserPw)
	id, err := o.Insert(u)
	return id, err
}
//通过tel获取用户数据
//@param 	tel  string      用户的电话号码
//@return   user Admin      返回用户的数组
//@return   err	 error      返回的错误
func GetAdminByTel(tel string) (user Admin,err error) {
	user = Admin{Tel: tel}
	o := orm.NewOrm()
	err = o.Read(&user, "tel")
		if err == orm.ErrNoRows {
			fmt.Println("查询不到")
		} else if err == orm.ErrMissPK {
			fmt.Println("找不到主键")
		}
	fmt.Println("user get admin",user)
	return user,err
}
//通过id获取用户数据
//@param 	id   int64      用户的电话号码
//@return   user Admin      返回用户的数组
//@return   err	 error      返回的错误
func GetAdminById(id int64) (user Admin,err error) {
	user = Admin{Id: id}
	o := orm.NewOrm()
	err = o.Read(&user, "id")
	if err == orm.ErrNoRows {
		fmt.Println("查询不到")
	} else if err == orm.ErrMissPK {
		fmt.Println("找不到主键")
	}
	fmt.Println("user get admin",user)
	return user,err
}
//通过id获取用户数据
//@param 	id   int64      用户的电话号码
//@return   	 int64      返回删除数据的状态
//@return   err	 error      返回的错误
func DelAdminById(Id int64) (int64, error) {
	o := orm.NewOrm()
	status, err := o.Delete(&Admin{Id: Id})
	return status, err
}
//通过tel删除用户数据
//@param 	tel   string      用户的电话号码
//@return   	 int64      返回删除数据的状态
//@return   err	 error      返回的错误
func DelAdminByTel(tel string) (int64, error) {
	admin,err1 := GetAdminByTel(tel)
	if err1 != nil{
		return 0, err1
	}
	o := orm.NewOrm()
	status, err := o.Delete(&admin)
	return status, err
}
//更新用户
//@param 	u   Admin      更新用户的数组结构
//@return   	Admin      返回用户的数据
//@return   err	 error      返回的错误
func UpdateAdmin(u *Admin) (Admin, error) {
	user := Admin{Tel:u.Tel}
	o := orm.NewOrm()
	err := o.Read(&user, "tel")
	if err == orm.ErrNoRows {
		fmt.Println("查询不到")
		return user,err
	} else if err == orm.ErrMissPK {
		fmt.Println("找不到主键")
		return user,err
	}
	if u.Tel != ""{
		user.Tel = u.Tel
	}
	if u.UserName != ""{
		user.UserName = u.UserName
	}
	if u.UserPw != ""{
		user.UserPw = u.UserPw
	}
	if num, err := o.Update(&user); err == nil {
		fmt.Println(num)
	}else{
		fmt.Println("Update",err)
	}
	fmt.Println("user",user)
	return user, err
}
